<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var data = [{
            id: 1,
            name: '大家电',
            pid: 0
        }, {
            id: 2,
            name: '服饰',
            pid: 0
        }, {
            id: 3,
            name: '电视',
            pid: 1
        }, {
            id: 13,
            name: '冰箱',
            pid: 1
        }, {
            id: 23,
            name: '海尔冰箱',
            pid: 13
        }, {
            id: 4,
            name: '长虹电视',
            pid: 3
        }, {
            id: 14,
            name: '小米电视',
            pid: 3
        }, {
            id: 5,
            name: '男装',
            pid: 2
        }, {
            id: 6,
            name: '男鞋',
            pid: 5
        }, {
            id: 7,
            name: '女装',
            pid: 2
        }]


        // 通过子级id获取其父级id

        const son = {
            id: 14,
            name: '小米电视',
            pid: 3
        }

        // 根据父级的id找出所有的子级id

        // 根据子级找父级
        function getParentId(list, son) {
            // 假设当前的son就是第3级
            // 定义数组变量来保存找到的父id
            const ids = []
            pTree(list, son)

            function pTree(list, son) {
                list.forEach(item => {
                    if (item.id === son.pid) {
                        // 二级
                        ids.push(item.id)

                        // 递归：子级的处理方式和父级的一致
                        pTree(list, item)

                        /* list.forEach(item1 => {
                            if (item1.id === item.pid) {
                                // 一级
                                ids.push(item1.id)
                            }
                        }) */
                    }
                })
            }

            return ids.reverse()
        }


        // 把以上数据变成层级数据，以children做为标识
        function tree(list, pid = 0, level = 0) {
            // 定义空数组来保存处理后的结果
            const arr = []
            list.forEach(item => {
                // 一级分类
                if (item.pid === pid) {
                    item.level = level

                    // 递归：此处发现子级处理方式和父级的处理方式一致
                    const son = tree(list, item.id, level + 1)
                    if (son && son.length) {
                        item.children = son
                    }
                    arr.push(item)

                    /* list.forEach(item1 => {
                        // 二级
                        if (item1.pid === item.id) {
                            item1.level = level + 1
                            item.children.push(item1)
                            item1.children = []
                            list.forEach(item2 => {
                                if (item2.pid === item1.id) {
                                    item2.level = level + 2
                                    item1.children.push(item2)
                                }
                            })
                        }
                    }) */
                }
            })
            return arr
        }

        // 获取树状数据
        // const result = tree(data, 0)
        // console.log(result)

        // 根据子级获取父级的id数组，比如id为14的数据，其父id为 [1,3]

        const result = getParentId(data, son)

        console.log(result)
    </script>
</body>

</html>